package com.sky.d_lock_free;

/**
 * http://ifeve.com/atomic-operation/
 * 原子操作的实现原理
 * @Author:hjt
 */
public class AtomDemo {

}

/**
	1.引言
		原子(atom):不能被进一步分割的最小粒子
		原子操作(atomic operation):不可被中断的一个或一系列操作
	
	2.术语定义
		术语名称		英文							解释
		缓存行		Cache line				缓存的最小操作单位
		比较并交换		Compare and Swap		CAS操作需要输入两个数值，一个旧值（期望操作前的值）和一个新值，在操作期间先比较下在旧值有没有发生变化，如果没有发生变化，才交换成新值，发生了变化则不交换。
		CPU流水线		CPU pipeline			CPU流水线的工作方式就象工业生产上的装配流水线，在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线，然后将一条X86指令分成5~6步后再由这些电路单元分别执行，这样就能实现在一个CPU时钟周期完成一条指令，因此提高CPU的运算速度。
		内存顺序冲突	Memory order violation	内存顺序冲突一般是由假共享引起，假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效，当出现这个内存顺序冲突时，CPU必须清空流水线。
		
	3.处理器如何实现原子操作
		Intel处理器：32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作
		处理器自动保证基本内存操作的原子性
			处理器保证从系统中读取或者写入一个字节是原子的
			提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性
		使用总线锁保证原子性:总线锁定把CPU和内存之间通信锁住
		缓存锁定:缓存在处理器缓存行中内存区域在LOCK操作期间被锁定
		
	4.JAVA如何实现原子操作
		使用循环CAS实现原子操作
			自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止：CounterDemo
		使用锁机制实现原子操作
			锁机制保证了只有获得锁的线程能够操作锁定的内存区域
			
	5.总线锁、缓存锁、同步锁、乐观锁、悲观锁、自旋锁、阻塞锁、
		可重入锁、读写锁、偏向锁、轻量级锁、公平锁、非公平锁、
		定时锁、互斥锁、类锁、对象锁、死锁、无锁
			
		
 */
